package com.example.demo.dao;

import com.example.demo.dataobject.UserDO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.time.LocalDateTime;
import java.util.List;

@Mapper
public interface UserDAO {
    /**
     * 批量添加用户
     * @param userDOs 用户列表
     * @return
     */
    int batchAdd(@Param("list") List<UserDO> userDOs);

    /**
     * 批量通过ID寻找用户
     * @param ids 用户ID列表
     * @return
     */
    List<UserDO> findByIds(@Param("ids") List<Long> ids);

    /**
     * 通过ID寻找用户
     * @param id 用户ID
     * @return
     */
    UserDO findById(@Param("id") Long id);

    /**
     * 添加用户
     * @param userDO 用户
     * @return
     */
    int add(UserDO userDO);

    /**
     * 更新用户昵称
     * @param userDO 用户
     * @return
     */
    int update(UserDO userDO);

    /**
     * 删除用户
     * @param id 用户id
     * @return
     */
    int delete(@Param("id") long id);

    /**
     * 查询所有数据
     * @return 所有用户列表
     */
    List<UserDO> findAll();

    /**
     * 通过用户名精确查找用户
     * @param userName 用户名
     * @return 用户
     */
    UserDO findByUserName(@Param("userName") String userName);

    /**
     * 通过用户名或昵称模糊查找用户，可指定用户注册时间段
     * @param keyWord 用户名或昵称
     * @param startTime 起使时间(可选)
     * @param endTime 结束时间(可选)
     * @return
     */
    List<UserDO> search(@Param("keyWord") String keyWord, @Param("startTime") LocalDateTime startTime,
                        @Param("endTime") LocalDateTime endTime);
}
